package com.sprouting.personal.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sprouting.personal.model.entity.MemberFamily;
import com.sprouting.personal.model.vo.BirthdayPerson;
import com.sprouting.personal.model.vo.MemberFamilyTree;
import com.sprouting.personal.model.vo.MemberFamilyVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 家庭成员信息表
 *
 * @author ：LX（长沙麓谷）
 * @date 创建时间： 2022/7/31 23:40
 */
public interface MemberFamilyDao extends BaseMapper<MemberFamily> {

    /**
     * 根据主键查询家庭用户
     * @param id 主键
     * @return
     */
    MemberFamily getMemberFamilyById(String id);

    /**
     * 根据真实姓名查询成员
     * @param id 成员ID，传了该ID，则会忽略查询该数据
     * @param userId 当前用户ID
     * @param userName 要添加的人员姓名
     * @return
     */
    MemberFamily getMemberFamilyRepeatQuery(@Param("id") String id, @Param("userId") String userId, @Param("userName") String userName);

    /**
     * 获取当前登陆用户的家庭成员信息
     * @param userId 所属用户ID
     * @param dictIdList 字典ID,也就是查询这些关系。会进行一次判断
     * @return
     */
    List<MemberFamilyVo> getMemberFamilyByUserId(@Param("userId") String userId, @Param("dictIdList") List<String> dictIdList);

    /**
     * 根据人员id查询所属的子级关系人员
     * @param sourceId 人员ID
     * @return
     */
    List<MemberFamilyVo> getSocialConnectionAll(String sourceId);

    /**
     * 根据主键查询人员信息表
     * @param idList 主键
     * @return
     */
    List<MemberFamily> getMemberFamilyByIdList(List<String> idList);

    /**
     * 根据登录用户ID查询全部成员
     * 过滤掉不开启生日提醒的，不过滤掉过世的，有时候过世人员需要进行拜祭
     * @param userId 当前用户ID
     * @return
     */
    List<BirthdayPerson> getMemberFamilyByUserIdAll(String userId);

    /**
     * 根据身份证查询人员
     * @param id 主键，传则忽略该ID
     * @param userId 登录用户ID
     * @param idCard 身份证
     * @return
     */
    MemberFamily getMemberFamilyByIdCard(@Param("id") String id, @Param("userId") String userId, @Param("idCard") String idCard);

    /**
     * 查询当前用户的全部的子级关系信息，包含对应的关系数据
     * @param userId 登录用户Id
     * @return
     */
    List<MemberFamilyTree> getMemberFamilyJoinByUserIdAll(String userId);

    /**
     * 根据主键查询用户，与上面的方法相比，会将一些关联信息查询出来
     * @param id 用户ID
     * @return
     */
    MemberFamilyVo getMemberFamilyByIdJoin(String id);

    /**
     * 根据用户ID查询全部的节点
     * @param userId 用户ID
     * @return
     */
    List<MemberFamily> getDiagramNode(String userId);

    /**
     * 获取陵墓信息
     * @param page 分页参数
     * @param userId 登录用户ID
     * @return
     */
    Page<MemberFamilyVo> getTombListPage(Page page, @Param("userId") String userId);

    /**
     * 统计当前用户存在多少条数据
     * @param userId 登录用户ID
     * @return
     */
    Long getMemberFamilyTotal(String userId);
}
